using System;

namespace Machinery.Cogs.Interfaces
{
    /// <summary>
    /// TimeCog is a class that Wraps DateTime.Now, which allows us to warp the current time for testing purposes.
    /// </summary>
    public interface ITimeCog
    {
        /// <summary>
        /// Returns the current time, or a warped, fake time, if one has been injected into the UnitTestTimeService via WarpTimeTo(DateTime).
        /// </summary>
        DateTime Now { get; }

        /// <summary>
        /// Override what the TimeCog thinks is the current time. Handy when testing user interface.
        /// </summary>
        /// <param name="warpedDateTime">The "new" present.</param>
        void WarpTimeTo(DateTime warpedDateTime);
    }
}